Image processing and neural networks are both paramount to machine learning. This markdown is a mere compilation of useful examples from the EBImage, imager, and mxnet R packages. The goal is to provide a summary of basic concepts of how images can be processed and submitted to a convolutional neural network in R.
Much of this code is borrowed directly from the below examples. Read the original documentation to learn much more:
- EBImage
- imager
- mxnet
Todo:
- Results are probably incorrect.
- AUC plotting does not work.
For this example: EBImage, mxnet, ggplot2, imager, jpeg, pROC
# EBImage
source("https://bioconductor.org/biocLite.R")
biocLite("EBImage")
# mxnet
cran = getOption("repos")
cran["dmlc"] = "https://apache-mxnet.s3-accelerate.dualstack.amazonaws.com/R/CRAN/"
# https://github.com/dmlc
# https://github.com/dmlc/drat
options(repos = cran)
install.packages("mxnet")
library(mxnet)
# ggplot2, imager, jpeg, pROC
install.packages(c("ggplot2", "imager", "jpeg", "pROC"))
Library
library(EBImage)
library(mxnet)
library(ggplot2)
library(imager)
## Loading required package: plyr
## Loading required package: magrittr
##
## Attaching package: 'imager'
## The following object is masked from 'package:magrittr':
##
## add
## The following object is masked from 'package:plyr':
##
## liply
## The following objects are masked from 'package:EBImage':
##
## channel, dilate, display, erode, resize, watershed
## The following objects are masked from 'package:stats':
##
## convolve, spectrum
## The following object is masked from 'package:graphics':
##
## frame
## The following object is masked from 'package:base':
##
## save.image
library(jpeg)
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following object is masked from 'package:imager':
##
## ci
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
Be sure to also check out:
# h2o - https://www.h2o.ai/
install.packages("h2o")
library(h2o)
# keras - https://keras.rstudio.com/
install.packages("keras")
library(keras)
# install_keras(method = "conda")
install_keras()
# tensorflow - https://tensorflow.rstudio.com/tensorflow/articles/installation.html
install.packages("tensorflow")
library(tensorflow)
install_tensorflow()
koi_fish_EB = EBImage::readImage("/Users/evan.muzzall/Desktop/MachineLearningWG/Fall2017/Sep22-images-cnn/images-cnn-R/image_001.jpg") # load fullsize color image
class(koi_fish_EB)
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
koi_fish_EB
## Image
## colorMode : Color
## storage.mode : double
## dim : 1125 750 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:6,1]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1647059
## [2,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1686275
## [3,] 0.1568627 0.1529412 0.1529412 0.1568627 0.1607843 0.1686275
## [4,] 0.1568627 0.1568627 0.1568627 0.1568627 0.1607843 0.1686275
## [5,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1647059 0.1725490
par(mfrow=c(1,2)); plot(koi_fish_EB)
# imageData(koi_fish_EB)
koi_fish = imager::load.image("/Users/evan.muzzall/Desktop/MachineLearningWG/Fall2017/Sep22-images-cnn/images-cnn-R/image_001.jpg") # same image
class(koi_fish) # different class? # http://www.cimg.eu/
## [1] "cimg" "imager_array" "numeric"
koi_fish
## Image. Width: 1125 pix Height: 750 pix Depth: 1 Colour channels: 3
plot(koi_fish)
# as.array(koi_fish)
# shorter names
koiEB = koi_fish_EB
koi = koi_fish
plot(koiEB)
plot(max(koiEB) - koiEB) # do math stuff! (see below)
par(mfrow=c(1,1)); hist(koiEB, lwd = 2) # RGB intensity
# View image data
attributes(koiEB)
## $dim
## [1] 1125 750 3
##
## $colormode
## [1] 2
##
## $class
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
attributes(koi)
## $class
## [1] "cimg" "imager_array" "numeric"
##
## $dim
## [1] 1125 750 1 3
# + / - brightness
koiEB1 = koiEB + 0.5
koiEB2 = koiEB - 0.5
par(mfrow=c(1,2)); plot(koiEB1); plot(koiEB2)
# * contrast
koiEB3 = koiEB * 0.25
koiEB4 = koiEB * 5
plot(koiEB3); plot(koiEB4)
# ^ gamma correction
koiEB5 = koiEB ^ 10
koiEB6 = koiEB ^ 0.75
plot(koiEB5); plot(koiEB6)
# flip, rotate, translate, rotate/translate
koiEB7 = flip(koiEB)
koiEB8 = rotate(koiEB, 45)
koiEB9 = translate(koiEB, c(500, 0))
koiEB10 = translate(rotate(koiEB, 45), c(0, 500))
par(mfrow=c(1,4)); plot(koiEB7); plot(koiEB8); plot(koiEB9); plot(koiEB10)
# grayscale frames
koiEB9 = koiEB
koiEB9 # frames.render
## Image
## colorMode : Color
## storage.mode : double
## dim : 1125 750 3
## frames.total : 3
## frames.render: 1
##
## imageData(object)[1:5,1:6,1]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1647059
## [2,] 0.1529412 0.1529412 0.1529412 0.1529412 0.1607843 0.1686275
## [3,] 0.1568627 0.1529412 0.1529412 0.1568627 0.1607843 0.1686275
## [4,] 0.1568627 0.1568627 0.1568627 0.1568627 0.1607843 0.1686275
## [5,] 0.1568627 0.1568627 0.1568627 0.1607843 0.1647059 0.1725490
colorMode(koiEB9) = Grayscale
par(mfrow=c(1,1)); plot(koiEB9)
## Only the first frame of the image stack is displayed.
## To display all frames use 'all = TRUE'.
plot(koiEB9, all = T)
attributes(koiEB9)
## $dim
## [1] 1125 750 3
##
## $colormode
## [1] 0
##
## $class
## [1] "Image"
## attr(,"package")
## [1] "EBImage"
# imageData(koiEB9)
# load a URL!
cartoon = load.image("https://carboncostume.com/wordpress/wp-content/uploads/2013/04/Calvin-and-Hobbes.jpg")
plot(cartoon)
# basic info
plot(koi) # coordinates appear, etc.
# what is noise?
# set.seed(1)
noise = array(runif(5*5*5*3),c(5,5,5,3)) #5x5 pixels, 5 frames, 3 colors. All noise
# the color channel comma cascade:
noise[,,,1] # multiple frames of a single color channel
## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.2165910 0.85889431 0.2240415 0.7237455 0.767017245
## [2,] 0.9215360 0.02692531 0.4245499 0.8041211 0.002477831
## [3,] 0.5887304 0.10981007 0.2322821 0.6619224 0.324283957
## [4,] 0.9626456 0.76354879 0.7620077 0.6070075 0.064626638
## [5,] 0.3051101 0.71781823 0.6590851 0.9508119 0.101266850
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.3189171 0.829259446 0.80514918 0.7014689 0.38667938
## [2,] 0.4093652 0.663645647 0.71834546 0.8749299 0.08146706
## [3,] 0.0580800 0.153778796 0.08967635 0.7836172 0.90929827
## [4,] 0.7388966 0.006742221 0.35972259 0.1109142 0.51370162
## [5,] 0.1285854 0.761996568 0.41454907 0.3358010 0.61736717
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.8064842 0.8034030 0.02090191 0.7589014 0.8948724
## [2,] 0.9078531 0.6751232 0.06767809 0.6301260 0.8966232
## [3,] 0.1681389 0.4715458 0.04656787 0.5504228 0.9703717
## [4,] 0.9912175 0.8228543 0.27457053 0.9113761 0.9895897
## [5,] 0.8373412 0.8592794 0.16056178 0.7947528 0.8960424
##
## , , 4
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.31967646 0.7047837 0.2598595 0.3533917 0.5499076
## [2,] 0.03188947 0.9304651 0.7236470 0.7845687 0.1072325
## [3,] 0.04860569 0.5032494 0.9638024 0.5542222 0.7982115
## [4,] 0.60519629 0.9748419 0.9019760 0.2937625 0.7591349
## [5,] 0.21336310 0.7685153 0.9613006 0.3182348 0.9240564
##
## , , 5
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.31890823 0.44810948 0.19630789 0.29912270 0.2571750
## [2,] 0.11561988 0.13965752 0.09278179 0.02128383 0.2180275
## [3,] 0.68747128 0.06259736 0.62436189 0.63895742 0.4941538
## [4,] 0.45391557 0.35066930 0.29655748 0.22310572 0.6580405
## [5,] 0.09872768 0.84362016 0.01020359 0.83568592 0.1909827
noise[,,1,1] # single frame
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.2165910 0.85889431 0.2240415 0.7237455 0.767017245
## [2,] 0.9215360 0.02692531 0.4245499 0.8041211 0.002477831
## [3,] 0.5887304 0.10981007 0.2322821 0.6619224 0.324283957
## [4,] 0.9626456 0.76354879 0.7620077 0.6070075 0.064626638
## [5,] 0.3051101 0.71781823 0.6590851 0.9508119 0.101266850
noise[,1,1,1] # col
## [1] 0.2165910 0.9215360 0.5887304 0.9626456 0.3051101
noise[1,,1,1] # row
## [1] 0.2165910 0.8588943 0.2240415 0.7237455 0.7670172
noise = as.cimg(noise) # convert it back to handy cimg format
plot(noise) #, frame = 2)
## Warning in plot.cimg(noise): Showing first frame
# make a grayscale copy
koi_g = grayscale(koi)
plot(koi_g)
# convert to data frame
koi_df = as.data.frame(koi)
head(koi_df) # aha! we have an xy coordinate, color channel, and pixel value
## x y cc value
## 1 1 1 1 0.1529412
## 2 2 1 1 0.1529412
## 3 3 1 1 0.1568627
## 4 4 1 1 0.1568627
## 5 5 1 1 0.1568627
## 6 6 1 1 0.1607843
koi_df = plyr::mutate(koi_df, channel = factor(cc, labels=c("Red","Green", "Blue")))
head(koi_df) # relabel color channel
## x y cc value channel
## 1 1 1 1 0.1529412 Red
## 2 2 1 1 0.1529412 Red
## 3 3 1 1 0.1568627 Red
## 4 4 1 1 0.1568627 Red
## 5 5 1 1 0.1568627 Red
## 6 6 1 1 0.1607843 Red
# Look at rgb channels of the color image
ggplot(koi_df, aes(value, fill = channel)) +
geom_histogram(bins=30) +
facet_wrap(~ channel) +
theme_minimal() +
guides(fill = F)
# gradients
gr = imgradient(koi_g,"xy")
gr
## Image list of size 2
plot(gr)
# pixsets
pix = koi_g > .6 # Select pixels with high luminance
pix
## Pixel set of size 80688. Width: 1125 pix Height: 750 pix Depth: 1 Colour channels: 1
plot(pix)
# highlight contours using pixel sets
pix = (isoblur(koi_g, 4) > .5 )
highlight(pix)
# highlight certain areas
plot(koi_g)
# Start the fill at location (900,400). sigma sets the tolerance
px.flood(koi_g,900, 400,sigma=.35) %>% highlight
# or, just plot boundaries
plot(boundary(pix))
# basic morphological image processing - https://www.cs.auckland.ac.nz/courses/compsci773s1c/lectures/ImageProcessing-html/topic4.htm
plot(koi)
highlight(pix)
#Grow by 5 pixels
grow(pix,5) %>% highlight(col="green", lwd = 3)
#Shrink by 5 pixels
shrink(pix,5) %>% highlight(col="blue", lwd = 3)
#Below is a replication of Taweh Beysolow II / gwens CNN instructions:
#https://github.com/Apress/intro-to-deep-learning-using-r
#Downloading the strings of the image files in each directory
fish_photos = list.files("/Users/evan.muzzall/Desktop/MachineLearningWG/Fall2017/Sep22-images-cnn/images-cnn-R")
fish_photos
## [1] "image_001.jpg" "image_002.jpg" "image_003.jpg" "image_004.jpg"
## [5] "image_005.jpg" "image_006.jpg" "image_007.jpg" "image_008.jpg"
## [9] "image_009.jpg" "image_010.jpg" "image_011.jpg" "image_012.jpg"
## [13] "image_013.jpg" "image_014.jpg" "image_015.jpg" "image_016.jpg"
## [17] "image_017.jpg" "image_018.jpg" "image_019.jpg" "image_020.jpg"
#Preprocessing
#Downloading the image data
img_data = data.frame()
#Turning Photos into Bitmaps
for (i in 1:length(fish_photos)){
img = readJPEG(paste("/Users/evan.muzzall/Desktop/MachineLearningWG/Fall2017/Sep22-images-cnn/images-cnn-R/", fish_photos[i], sep = ""))
#Reshape to 64x64 pixel size and grayscale image
img = Image(img, dim = c(64, 64), color = "grayscale")
#Resizing Image to 28x28 Pixel Size
img = Image(img, dim = c(28, 28))
img = img@.Data
#Transforming to vector
img = as.vector(t(img))
#Adding Label
label = 1
img = c(label, img)
#Appending to List
img_data = rbind(img_data, img)
}
#Transforming data into matrix for input into CNN
training_set = data.matrix(img_data)
training_set = as.data.frame(training_set)
# names(training_set)
training_set$X1 = c(c(rep(1,15), rep(0,5))) # quickly relabel class: koi (1) or not koi (0).
set.seed(1)
#Cross Validating Results
rows = sample(1:nrow(training_set), nrow(training_set)*.75)
rows
## [1] 6 8 11 16 4 14 15 9 19 1 3 2 20 10 5
#Training Set
x_train = t(training_set[rows, -1])
y_train = training_set[rows, 1]
dim(x_train) = c(28,28, 1, ncol(x_train))
#Test Set
x_test = t(training_set[-rows, -1])
y_test = training_set[-rows, 1]
dim(x_test) = c(28,28, 1, ncol(x_test))
#####################################
#Building Convolutional Neural Network
#We will use a LeNet Architecture for this example. Readers may feel free to experiment by using alternative arhcitectures
# this example uses a sigmoid activation type
data = mx.symbol.Variable('data')
#Layer 1
convolution_l1 = mx.symbol.Convolution(data = data, kernel = c(5,5), num_filter = 20)
sigmoid_l1 = mx.symbol.Activation(data = convolution_l1, act_type = "sigmoid")
pooling_l1 = mx.symbol.Pooling(data = sigmoid_l1, pool_type = "max", kernel = c(1,1), stride = c(1,1))
#Layer 2
convolution_l2 = mx.symbol.Convolution(data = pooling_l1, kernel = c(3,3), num_filter = 10)
sigmoid_l2 = mx.symbol.Activation(data = convolution_l2, act_type = "sigmoid")
pooling_l2 = mx.symbol.Pooling(data = sigmoid_l2, pool_type = "max", kernel = c(1,1), stride = c(1,1))
#Fully Connected 1
fl = mx.symbol.Flatten(data = pooling_l2)
full_conn1 = mx.symbol.FullyConnected(data = fl, num_hidden = 500)
sigmoid_l3 = mx.symbol.Activation(data = full_conn1, act_type = "sigmoid")
#Fully Connected 2
full_conn2 = mx.symbol.FullyConnected(data = sigmoid_l3, num_hidden = 40)
#Softmax Classification Layer
CNN = mx.symbol.SoftmaxOutput(data = full_conn2)
##################################################################################################
#Model Training and Parameter Tuning
mx.set.seed(1)
#Learning Rate Parameter
AUC = c()
learn_rate = c(0.01, 0.02, 0.03, 0.10)
CPU = mx.cpu()
for (i in 1:length(learn_rate)){
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 50, array.batch.size = 40,
learning.rate = learn_rate[i],
momentum = 0.9, eval.metric = mx.metric.accuracy,
epoch.end.callback = mx.callback.log.train.metric(100), optimizer = "sgd")
#Calculating Training Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
AUC = append(AUC, roc(as.factor(y_train), as.numeric(Labels))$auc[1])
}
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.2
## [14] Train-accuracy=0.2
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.2
## [11] Train-accuracy=0.2
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.2
## [10] Train-accuracy=0.2
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.2
## [7] Train-accuracy=0.2
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.933333333333333
## [37] Train-accuracy=0.933333333333333
## [38] Train-accuracy=0.933333333333333
## [39] Train-accuracy=0.933333333333333
## [40] Train-accuracy=0.933333333333333
## [41] Train-accuracy=0.933333333333333
## [42] Train-accuracy=0.933333333333333
## [43] Train-accuracy=0.933333333333333
## [44] Train-accuracy=0.933333333333333
## [45] Train-accuracy=0.933333333333333
## [46] Train-accuracy=0.933333333333333
## [47] Train-accuracy=0.933333333333333
## [48] Train-accuracy=0.933333333333333
## [49] Train-accuracy=0.933333333333333
## [50] Train-accuracy=0.933333333333333
# learn about momentum and learning rate adaptation here:
# https://www.willamette.edu/~gorr/classes/cs449/momrate.html
#Plotting AUC
plot(learn_rate, AUC, main = "AUC for CNN \n Training Learning Rate Parameter", xlab = "learning rate",
ylab = "AUC Score", type = "l", col = "cadetblue")
#Momentum Parameter
mx.set.seed(1)
AUC1 = c()
mom = c(0.5, 0.9, 1.5)
CPU = mx.cpu()
for (i in 1:length(mom)){
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 50, array.batch.size = 40,
learning.rate = 0.04,
momentum = mom[i], eval.metric = mx.metric.accuracy,
epoch.end.callback = mx.callback.log.train.metric(100), optimizer = "sgd")
#Calculating Training Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
AUC1 = append(AUC1, roc(as.factor(y_train), as.numeric(Labels))$auc[1])
}
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.2
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.8
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.2
## [15] Train-accuracy=0.2
## [16] Train-accuracy=0.2
## [17] Train-accuracy=0.2
## [18] Train-accuracy=0.2
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
#Plotting AUC
plot(mom, AUC1, main = "AUC for CNN \n Training Momentum Parameter", xlab = "momentum",
ylab = "AUC Score", type = "l", col = "cadetblue")
##################################################################################################
#Fitted Model Training
cnn_model = mx.model.FeedForward.create(CNN, X = x_train, y = y_train, ctx = CPU,
num.round = 150, array.batch.size = 40,
learning.rate = 0.04, momentum = 0.9, eval.metric = mx.metric.accuracy,
optimizer = "sgd")
## Start training with 1 devices
## [1] Train-accuracy=NaN
## [2] Train-accuracy=0
## [3] Train-accuracy=0.8
## [4] Train-accuracy=0.8
## [5] Train-accuracy=0.8
## [6] Train-accuracy=0.8
## [7] Train-accuracy=0.8
## [8] Train-accuracy=0.2
## [9] Train-accuracy=0.8
## [10] Train-accuracy=0.8
## [11] Train-accuracy=0.8
## [12] Train-accuracy=0.8
## [13] Train-accuracy=0.8
## [14] Train-accuracy=0.8
## [15] Train-accuracy=0.8
## [16] Train-accuracy=0.8
## [17] Train-accuracy=0.8
## [18] Train-accuracy=0.8
## [19] Train-accuracy=0.8
## [20] Train-accuracy=0.8
## [21] Train-accuracy=0.8
## [22] Train-accuracy=0.8
## [23] Train-accuracy=0.8
## [24] Train-accuracy=0.8
## [25] Train-accuracy=0.8
## [26] Train-accuracy=0.8
## [27] Train-accuracy=0.8
## [28] Train-accuracy=0.8
## [29] Train-accuracy=0.8
## [30] Train-accuracy=0.8
## [31] Train-accuracy=0.8
## [32] Train-accuracy=0.8
## [33] Train-accuracy=0.8
## [34] Train-accuracy=0.8
## [35] Train-accuracy=0.8
## [36] Train-accuracy=0.8
## [37] Train-accuracy=0.8
## [38] Train-accuracy=0.8
## [39] Train-accuracy=0.8
## [40] Train-accuracy=0.8
## [41] Train-accuracy=0.8
## [42] Train-accuracy=0.8
## [43] Train-accuracy=0.8
## [44] Train-accuracy=0.8
## [45] Train-accuracy=0.8
## [46] Train-accuracy=0.8
## [47] Train-accuracy=0.8
## [48] Train-accuracy=0.8
## [49] Train-accuracy=0.8
## [50] Train-accuracy=0.8
## [51] Train-accuracy=0.8
## [52] Train-accuracy=0.8
## [53] Train-accuracy=0.8
## [54] Train-accuracy=0.8
## [55] Train-accuracy=0.8
## [56] Train-accuracy=0.8
## [57] Train-accuracy=0.8
## [58] Train-accuracy=0.8
## [59] Train-accuracy=0.8
## [60] Train-accuracy=0.8
## [61] Train-accuracy=0.8
## [62] Train-accuracy=0.8
## [63] Train-accuracy=0.8
## [64] Train-accuracy=0.8
## [65] Train-accuracy=0.8
## [66] Train-accuracy=0.8
## [67] Train-accuracy=0.8
## [68] Train-accuracy=0.8
## [69] Train-accuracy=0.8
## [70] Train-accuracy=0.8
## [71] Train-accuracy=0.8
## [72] Train-accuracy=0.8
## [73] Train-accuracy=0.8
## [74] Train-accuracy=0.8
## [75] Train-accuracy=0.8
## [76] Train-accuracy=0.8
## [77] Train-accuracy=0.8
## [78] Train-accuracy=0.8
## [79] Train-accuracy=0.8
## [80] Train-accuracy=0.8
## [81] Train-accuracy=0.8
## [82] Train-accuracy=0.8
## [83] Train-accuracy=0.8
## [84] Train-accuracy=0.8
## [85] Train-accuracy=0.8
## [86] Train-accuracy=0.8
## [87] Train-accuracy=0.8
## [88] Train-accuracy=0.8
## [89] Train-accuracy=0.8
## [90] Train-accuracy=0.8
## [91] Train-accuracy=0.8
## [92] Train-accuracy=0.8
## [93] Train-accuracy=0.8
## [94] Train-accuracy=0.8
## [95] Train-accuracy=0.8
## [96] Train-accuracy=0.8
## [97] Train-accuracy=0.8
## [98] Train-accuracy=0.8
## [99] Train-accuracy=0.8
## [100] Train-accuracy=0.8
## [101] Train-accuracy=0.8
## [102] Train-accuracy=0.8
## [103] Train-accuracy=0.8
## [104] Train-accuracy=0.8
## [105] Train-accuracy=0.8
## [106] Train-accuracy=0.8
## [107] Train-accuracy=0.8
## [108] Train-accuracy=0.8
## [109] Train-accuracy=0.8
## [110] Train-accuracy=0.8
## [111] Train-accuracy=0.8
## [112] Train-accuracy=0.8
## [113] Train-accuracy=0.8
## [114] Train-accuracy=0.8
## [115] Train-accuracy=0.8
## [116] Train-accuracy=0.8
## [117] Train-accuracy=0.8
## [118] Train-accuracy=0.8
## [119] Train-accuracy=0.8
## [120] Train-accuracy=0.8
## [121] Train-accuracy=0.8
## [122] Train-accuracy=0.8
## [123] Train-accuracy=0.8
## [124] Train-accuracy=0.8
## [125] Train-accuracy=0.8
## [126] Train-accuracy=0.8
## [127] Train-accuracy=0.8
## [128] Train-accuracy=0.8
## [129] Train-accuracy=0.8
## [130] Train-accuracy=0.8
## [131] Train-accuracy=0.8
## [132] Train-accuracy=0.8
## [133] Train-accuracy=0.8
## [134] Train-accuracy=0.8
## [135] Train-accuracy=0.8
## [136] Train-accuracy=0.8
## [137] Train-accuracy=0.8
## [138] Train-accuracy=0.8
## [139] Train-accuracy=0.8
## [140] Train-accuracy=0.8
## [141] Train-accuracy=0.8
## [142] Train-accuracy=0.8
## [143] Train-accuracy=0.8
## [144] Train-accuracy=0.8
## [145] Train-accuracy=0.8
## [146] Train-accuracy=0.8
## [147] Train-accuracy=0.8
## [148] Train-accuracy=0.8
## [149] Train-accuracy=0.8
## [150] Train-accuracy=0.8
#Calculating Training Set Accuracy
y_h = predict(cnn_model, x_train)
Labels = max.col(t(y_h)) - 1
roc(as.factor(y_train), as.numeric(Labels))
##
## Call:
## roc.default(response = as.factor(y_train), predictor = as.numeric(Labels))
##
## Data: as.numeric(Labels) in 3 controls (as.factor(y_train) 0) < 12 cases (as.factor(y_train) 1).
## Area under the curve: 0.5
curve = roc(as.factor(y_train), as.numeric(Labels))
#Plotting Results
plot(curve, main = "ROC Curve for Convolutional Neural Network \n Train Set")
#Calculating Test Set Accuracy
y_h = predict(cnn_model, x_test)
Labels = max.col(t(y_h)) - 1
roc(as.factor(y_test), as.numeric(Labels))
##
## Call:
## roc.default(response = as.factor(y_test), predictor = as.numeric(Labels))
##
## Data: as.numeric(Labels) in 2 controls (as.factor(y_test) 0) < 3 cases (as.factor(y_test) 1).
## Area under the curve: 0.5
curve1 = roc(as.factor(y_test), as.numeric(Labels))
#Plotting Results
plot(curve1, main = "ROC Curve for Convolutional Neural Network \n Test Set")